package br.com.nomeempresa.locadora.controller;

import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;

import br.com.nomeempresa.locadora.app.Principal;
import br.com.nomeempresa.locadora.dao.ClienteDAO;
import br.com.nomeempresa.locadora.modelo.TabelaCliente;
import br.com.nomeempresa.locadora.modelo.Cliente;
import javafx.beans.property.IntegerProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;

public class ClienteController implements Initializable {

    @FXML
    private TableView<TabelaCliente> tabelaCliente;

    @FXML
    private TableColumn clCodigo;

    @FXML
    private TableColumn clNome;

    @FXML
    private TableColumn clCPF;

    @FXML
    private TableColumn clTelefone;

    @FXML
    private TextField txCodigo;

    @FXML
    private TextField txNome;

    @FXML
    private TextField txCPF;

    @FXML
    private TextField txTelefone;

    @FXML
    private Button btVoltar;

    @FXML
    private Button btLimpar;

    @FXML
    private Button btEditar;

    @FXML
    private Button btExcluir;

    @FXML
    private Button btSalvar;

    @FXML
    void eventEditar(ActionEvent event) {
    	IntegerProperty cdCliente = tabelaCliente.getSelectionModel().getSelectedItem().codigoProperty();
    	
    	ClienteDAO dao = new ClienteDAO();
    	Cliente cSalvo = dao.listarPorId(cdCliente.intValue());
    	txCodigo.setText(String.valueOf(cSalvo.getCodigo()));
    	txNome.setText(cSalvo.getNome());
    	txCPF.setText(cSalvo.getCpf());
    	txTelefone.setText(cSalvo.getTelefone());
    }

    @FXML
    void eventExcluir(ActionEvent event) {
    	int linhaSelecionada = tabelaCliente.getSelectionModel().getSelectedIndex();
    	IntegerProperty cdCliente = tabelaCliente.getSelectionModel().getSelectedItem().codigoProperty();
    	ClienteDAO dao = new ClienteDAO();
    	dao.excluir(cdCliente.intValue());
    	tabelaCliente.getItems().remove(linhaSelecionada);
    }

    @FXML
    void eventSalvar(ActionEvent event) {
    	Cliente c = new Cliente();
    	c.setNome(txNome.getText());
    	c.setCpf(txCPF.getText());
    	c.setTelefone(txTelefone.getText());
    	ClienteDAO dao = new ClienteDAO();
    	
    	if(!txCodigo.getText().trim().equals("")){
    		c.setCodigo(Integer.parseInt(txCodigo.getText()));
    		dao.editar(c);
    	}else{
    		dao.inserir(c);    		
    	}
		carregarTabela();
		limparDados();
    }

    @FXML
    void eventLimpar(ActionEvent event) {
    	limparDados();
    }
    
    @FXML
    void eventVoltar(ActionEvent event) {
    	try{
    		Parent root = FXMLLoader.load(getClass().getResource("/br/com/nomeempresa/locadora/view/Principal.fxml"));
    		Principal.scene.setRoot(root);
    	}catch(IOException ex){
    		ex.printStackTrace();
    	}
    }
    
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		carregarTabela();
	}

	private void carregarTabela() {
		ClienteDAO dao = new ClienteDAO();
		List<Cliente> clientes = dao.listar();
		ObservableList<TabelaCliente> dados = FXCollections.observableArrayList();
		
		for(Cliente c: clientes){
			dados.add(new TabelaCliente(c));
		}
		
		clCodigo.setCellValueFactory(new PropertyValueFactory("codigo"));
		clNome.setCellValueFactory(new PropertyValueFactory("nome"));
		clCPF.setCellValueFactory(new PropertyValueFactory("cpf"));
		clTelefone.setCellValueFactory(new PropertyValueFactory("telefone"));
		tabelaCliente.setItems(dados);
	}
	
	public void limparDados() {
    	txCodigo.setText("");
    	txNome.setText("");
    	txCPF.setText("");
    	txTelefone.setText("");
	}
}
